<?php

//判断是否微信浏览器
function is_weixin()
{
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== FALSE) {
        return TRUE;
    }

    return FALSE;
}


function replaceparams($params, $src)
{
    //遍历排序后的参数数组中的每一个key/value对
    foreach ($params as $k => $v) {
        $src = str_replace('@' . $k, $v, $src);
    }

    return $src;
}

//微群管家，内容转码
function unicode2utf8($str)
{
    $t = preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", $str);

    return $t;
}

// 七牛空间
function Qiniu_Encode($str) // URLSafeBase64Encode
{
    $find = ['+', '/'];
    $replace = ['-', '_'];

    return str_replace($find, $replace, base64_encode($str));
}

function Qiniu_Sign($url)
{ // $info里面的url
    $setting = C('UPLOAD_SITEIMG_QINIU');
    $duetime = NOW_TIME + 86400; // 下载凭证有效时间
    $DownloadUrl = $url . '?e=' . $duetime;
    $Sign = hash_hmac('sha1', $DownloadUrl, $setting ["driverConfig"] ["secrectKey"], TRUE);
    $EncodedSign = Qiniu_Encode($Sign);
    $Token = $setting ["driverConfig"] ["accessKey"] . ':' . $EncodedSign;
    $RealDownloadUrl = $DownloadUrl . '&token=' . $Token;

    return $RealDownloadUrl;
}





/**
 *
 * 递归查找当前分类下的所有子分类
 * @param array $dept_list 所有的分类数据
 * @param array $startids 最开始查找的id
 * @return array 返回所有id信息
 */
function getsonlist(array $dept_list, $startid)
{
    static $sonids;
    if (!$sonids) {
        $sonids = [$startid];
    }
    $thistmp = [];
    foreach ($dept_list as $key => $value) {
        if (in_array($value['pid'], $sonids)) {
            array_push($sonids, $value['id']);//找到下级id
            array_push($thistmp, $value['id']);//本次查找找到
            unset($dept_list[$key]);//找过的就不用再找了
        }
    }
    if (!$thistmp) {
        //如果最后再也找不到了，就返回信息
        $res = $sonids;
        $sonids = null;
        return $res;
    } else {
        return getsonlist($dept_list, $sonids);//如果还能找到就接着找
    }
}

/**
 * 递归查找当前分类下的所有父级分类
 * @param array $dept_list 所有的分类数据
 * @param array $startpid 最开始的pid
 * @return array 返回所有父级别id信息
 */
function getparlist(array $dept_list, $startpid)
{
    static $pids;
    if (!$pids) {
        $pids = [$startpid];
    }
    $thistmp = [];
    foreach ($dept_list as $key => $value) {
        if (in_array($value['id'], $pids)) {
            if ($value['pid'] > 0) {
                array_push($pids, $value['pid']);//上级id
                array_push($thistmp, $value['pid']);//本次查找找到
                unset($dept_list[$key]);//找过的就不用再找了
            }
        }
    }
    if (!$thistmp) {
        //如果最后再也找不到了，就返回信息
        $res = $pids;
        $pids = null;
        return $res;
    } else {
        return getparlist($dept_list, $pids);//如果还能找到就接着找
    }
}

// 获取当前登录用户,$islogin表示必须登录
function getappuser($islogin = true, $jumpUrl = '')
{
    //本地调试用
    if (C('DEBUG_LOCAL')) {

        $model_wx_user = new \Api\Model\WxuserModel();

        $_SESSION ["appuser"] = M($model_wx_user->customTableName(C('MY_UNIONID')))->where(['unionid' => C('MY_UNIONID')])->find();

    }
    return \Lib\LoginUser::getUser($islogin, $jumpUrl);
}

/**
 * 缓存数据库的形式获取access_token
 * @param $appid
 * @param $appsecret
 * @return bool
 */
function get_wx_access_token($appid, $appsecret)
{
    if (!$appid || !$appsecret) {
        return false;
    }
    $AccessTokenMgr = \Lib\AccessTokenMgr::getInstance($appid);
    $access_token = $AccessTokenMgr->get();
    if (false == $access_token) {
        $access_token = $AccessTokenMgr->refresh($appid, $appsecret);
        if (false == $access_token) {
            $access_token = $AccessTokenMgr->refresh($appid, $appsecret);
        }
        if (false == $access_token) {
            return false;
        }
    }
    return $access_token;
}

function is_error($data)
{
    if (empty($data) || !is_array($data) || !array_key_exists('errno', $data) || (array_key_exists('errno', $data) && $data['errno'] == 0)) {
        return false;
    } else {
        return true;
    }
}









